/*
*
==============================================================================
*  Name        : 
*  Part of     : Omen Game Engine
*  Description : 
*  Version     : 1.0
*
*  Copyright (c) 2013 Lauri Kortevaara.
* 
==============================================================================
*/

#pragma once

#include "OmenConfig.h"
#include "IOmenObject.h"


namespace Omen
{
    class OMEN_API IAnimation : public Omen::IObject
    {
    public:
        virtual Omen_GUID classId() const = 0;  //
        
        typedef enum _easing_type 
        {
            Linear,
            Ease,
            EaseIn,
            EaseOut,
            EaseInOut
        } EasingType;

    public: 
        virtual unsigned long windowHandle() const = 0;

        virtual void setStartValue( Omen::Float startValue ) = 0;
        virtual void setEndvalue( Omen::Float endValue ) = 0;
        virtual void setDuration( Omen::Float duration ) = 0;

        virtual Omen::Float startValue() const = 0;
        virtual Omen::Float endValue() const = 0;
        virtual Omen::Float duration() const = 0;

        virtual Omen::Float currentValue() = 0; /// <summary> Current 

        virtual void start() = 0;  /// <summary> Start the animation </summary>
        virtual void stop() = 0;   /// <summary> Stop the animation </summary>
        virtual void pause() = 0;  /// <summary> Pause the animation </summary>

        virtual void setEasingType( const Omen::IAnimation::EasingType& type );
        
    protected:
    private:
    };
}